package org.ehe.system.domain.bo;

import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ehe.common.core.validate.AddGroup;
import org.ehe.common.core.validate.EditGroup;
import org.ehe.common.mybatis.core.domain.BaseEntity;
import org.ehe.common.sensitive.annotation.Sensitive;
import org.ehe.common.sensitive.core.SensitiveStrategy;
import org.ehe.system.domain.HrEmployee;

import java.util.Date;

/**
 * 员工主信息业务对象 hr_employee
 *
 * @author zhangnn
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = HrEmployee.class, reverseConvertGenerate = false)
public class HrEmployeeBo extends BaseEntity {

    /**
     * 员工ID
     */
    @NotNull(message = "员工ID不能为空", groups = { EditGroup.class })
    private Long employeeId;

    private Long userId;

    /**
     * 工号
     * 自动生成4位
     */
    //@NotBlank(message = "工号不能为空", groups = { AddGroup.class, EditGroup.class })
    //@Size(max = 50, message = "工号长度不能超过{max}个字符")
    private String employeeNo;

    /**
     * 姓名
     */
    @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
    @Size(max = 50, message = "姓名长度不能超过{max}个字符")
    private String employeeName;

    @NotBlank(message = "手机号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String mobile;

    private String sex;

    /**
     * 入职时间
     */
    @NotNull(message = "入职时间不能为空", groups = { EditGroup.class })
    private Date entryDate;

    /**
     * 部门ID
     */
    private Long deptId;

    /**
     * 岗位ID
     */
    private Long[] postIds;

    /**
     * 数据权限 当前角色ID
     */
    @Size(min = 1, message = "职工角色不能为空")
    private Long[] roleIds;

    /**
     * 合同类型（1固定期限 2无固定期限 3完成一定工作任务 4劳务合同）
     */
    private String contractType;

    /**
     * 合同开始日期
     */
    private Date contractStartDate;

    /**
     * 合同结束日期
     */
    private Date contractEndDate;

    /**
     * 合同期限（月）
     */
    private Integer contractDuration;

    /**
     * 薪资等级
     */
    @Size(max = 20, message = "薪资等级长度不能超过{max}个字符")
    private String salaryLevel;

    /**
     * 试用期（月）
     */
    private Integer probationPeriod;

    /**
     * 试用期结束日期
     */
    private Date probationEndDate;

    /**
     * 员工状态（1在职 2试用 3离职 4退休）
     */
    private String employeeStatus;

    /**
     * 身份证号
     */
    @Sensitive(strategy = SensitiveStrategy.ID_CARD)
    @Size(max = 18, message = "身份证号长度不能超过{max}个字符")
    private String idCard;

    /**
     * 学历
     */
    @Size(max = 20, message = "学历长度不能超过{max}个字符")
    private String education;

    /**
     * 专业
     */
    @Size(max = 100, message = "专业长度不能超过{max}个字符")
    private String major;

    /**
     * 毕业学校
     */
    @Size(max = 100, message = "毕业学校长度不能超过{max}个字符")
    private String graduationSchool;

    /**
     * 毕业时间
     */
    private Date graduationDate;

    /**
     * 紧急联系人
     */
    @Size(max = 50, message = "紧急联系人长度不能超过{max}个字符")
    private String emergencyContact;

    /**
     * 紧急联系电话
     */
    @Sensitive(strategy = SensitiveStrategy.PHONE)
    @Size(max = 20, message = "紧急联系电话长度不能超过{max}个字符")
    private String emergencyPhone;

    /**
     * 籍贯
     */
    @Size(max = 100, message = "籍贯长度不能超过{max}个字符")
    private String nativePlace;

    /**
     * 居住地址
     */
    @Size(max = 200, message = "居住地址长度不能超过{max}个字符")
    private String residenceAddress;

    /**
     * 银行账号
     */
    @Sensitive(strategy = SensitiveStrategy.BANK_CARD)
    @Size(max = 50, message = "银行账号长度不能超过{max}个字符")
    private String bankAccount;

    /**
     * 开户银行
     */
    @Size(max = 100, message = "开户银行长度不能超过{max}个字符")
    private String bankName;

    /**
     * 社保账号
     */
    @Size(max = 50, message = "社保账号长度不能超过{max}个字符")
    private String socialSecurityNo;

    /**
     * 公积金账号
     */
    @Size(max = 50, message = "公积金账号长度不能超过{max}个字符")
    private String providentFundNo;

    /**
     * 离职日期
     */
    private Date leaveDate;

    /**
     * 离职原因
     */
    @Size(max = 500, message = "离职原因长度不能超过{max}个字符")
    private String leaveReason;

}
